/**
 * 
 */
package edu.erpan.web.administracion;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

import edu.erpan.bl.entities.administracion.Genero;
import edu.erpan.bl.entities.administracion.Persona;
import edu.erpan.bl.entities.administracion.Rol;
import edu.erpan.bl.entities.administracion.TipoIdentificacion;
import edu.erpan.bl.entities.administracion.Usuario;
import edu.erpan.fachada.administracion.IUsuarioFachada;
import edu.erpan.fachada.administracion.UsuarioFachada;
import edu.erpan.util.entityManager.exceptions.PersistException;
import edu.erpan.util.entityManager.exceptions.QueryException;
import edu.erpan.web.util.Recursos;

/**
 * @author Jeison
 * @date 20/02/2013
 *
 */
public class GestionUsuariosBean implements Serializable {

	/**
	 * @author Jeison
	 * @date 12/06/2013
	 */
	private static final long serialVersionUID = -2718466646007092375L;
	private Usuario usuario;
	private Persona persona;
	
	private List<Usuario> listaUsuarios;
	private List<Persona> listaPersonas;

	private List<Rol>rolesUsuario;
	private Integer[] idRolesUsuario;
	private List<SelectItem>itemsRoles;
	
	private List<SelectItem> tiposIdentificacion;
	private List<SelectItem> generos;
	
	private boolean editandoPersona=false;
	
	private String contrasena;
	private String confirmacionContrasena;
	
	private boolean editarContrasena=false;
	
	public GestionUsuariosBean() {
		super();
		// TODO Auto-generated constructor stub
		this.usuario=new Usuario();
		this.persona=new Persona();
		this.rolesUsuario=new ArrayList<Rol>(0);
		this.idRolesUsuario=new Integer[0];
		
		this.persona.setTipoIdentificacion(new TipoIdentificacion());
		this.persona.setGenero(new Genero());
		this.usuario.setPersona(this.persona);
		this.listaUsuarios=new ArrayList<Usuario>(0);
		this.listaPersonas=new ArrayList<Persona>(0);
		this.contrasena="";
		this.confirmacionContrasena="";
		
		this.editandoPersona=false;
		this.editarContrasena=true;
		
		this.consltarTiposIdentificacion();
		this.consultarGeneros();
		this.consultarRoles();
		this.consultarInformacionPersonas();
	}

	private void consultarRoles() {
		IUsuarioFachada usuarioFachada=new UsuarioFachada();
		try {
			List<Rol>roles=usuarioFachada.consultarRoles();
			SelectItem item=null;
			this.itemsRoles=new ArrayList<SelectItem>(0);
			for (Rol rol: roles) {
				item=new SelectItem(rol.getIdrol(), rol.getNombre());
				this.itemsRoles.add(item);
			}
		} catch (Exception e) {
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}

	public void consltarTiposIdentificacion() {
		this.tiposIdentificacion=new ArrayList<SelectItem>(0);
		IUsuarioFachada usuarioFachada = new UsuarioFachada();
		try {
			List<TipoIdentificacion>listaTiposIdentificacion=usuarioFachada.consultarTiposIdentificacion();
			SelectItem item=null;
			for (TipoIdentificacion tipoIdentificacion : listaTiposIdentificacion) {
				item=new SelectItem(tipoIdentificacion.getIdtipoIdentificacion(), tipoIdentificacion.getNombre());
				this.tiposIdentificacion.add(item);
			}
		} catch (QueryException e) {
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_TIPOS_ID);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_CONSULTA);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		}catch (Exception e) {
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}
	
	public void consultarGeneros(){
		this.generos=new ArrayList<SelectItem>(0);
		IUsuarioFachada usuarioFachada = new UsuarioFachada();
		try {
			List<Genero>listaTiposIdentificacion=usuarioFachada.consultarGeneros();
			SelectItem item=null;
			for (Genero genero : listaTiposIdentificacion) {
				item=new SelectItem(genero.getIdgenero(), genero.getGenero());
				this.generos.add(item);
			}
		} catch (QueryException e) {
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_TIPOS_ID);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_CONSULTA);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		}catch (Exception e) {
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}
	
	public void consultarInformacionPersonas(ActionEvent evento){
		this.consultarInformacionPersonas();
	}
	
	public void consultarInformacionPersonas(){
		IUsuarioFachada usuarioFachada=new UsuarioFachada();
		try {
			
			this.listaPersonas=usuarioFachada.consultarPersonas(null);
			
		} catch (QueryException e) {
			
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_PERSONAS);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_CONSULTA);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (Exception e) {
			
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}
	
	public void seleccionarPersona(ActionEvent evento){
		Integer idPersona=(Integer)evento.getComponent().getAttributes().get("idPersona");
		
		IUsuarioFachada usuarioFachada=new UsuarioFachada();
		Persona persona=new Persona();
		persona.setIdpersona(idPersona);
		try {
			this.persona=usuarioFachada.consultarPersona(persona);
			
			this.editandoPersona=true;
			
			this.consultarInformacionUsuarios(this.persona);
		} catch (QueryException e) {
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_PERSONA);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_CONSULTA);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		}catch (Exception e) {
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}
	
	public void cambiarEstadoPersona(ActionEvent evento){
		Integer idPersona=(Integer)evento.getComponent().getAttributes().get("idPersona");
		
		IUsuarioFachada usuarioFachada=new UsuarioFachada();
		Persona persona=new Persona();
		persona.setIdpersona(idPersona);
		try {
			persona=usuarioFachada.consultarPersona(persona);
			//Se cambia el estado de la persona
			persona.setActivo(!persona.isActivo());
			
			usuarioFachada.editarPersona(persona);
			
			List<Usuario>usuarios=usuarioFachada.consultarUsuariosPersonas(persona);
			for (Usuario usuario : usuarios) {
				usuario.setActivo(persona.isActivo());
				usuarioFachada.editarUsuario(usuario);
			}
			
			this.consultarInformacionPersonas();
		} catch (PersistException e) {
			// TODO Auto-generated catch block
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_PERSONA);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_EDICION);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (QueryException e) {
			// TODO Auto-generated catch block
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_PERSONA);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_CONSULTA);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		}
	}
	
	private void consultarInformacionUsuarios(Persona persona){
		IUsuarioFachada usuarioFachada=new UsuarioFachada();
		try {
			this.listaUsuarios=new ArrayList<Usuario>(0);
			this.listaUsuarios=usuarioFachada.consultarUsuariosPersonas(persona);
			
			if(!this.listaUsuarios.isEmpty()){
				this.usuario=this.listaUsuarios.get(0);
				
				this.consultarRolesUsuario(this.usuario);
				
				this.editarContrasena=false;
			}else{
				this.usuario.setPersona(this.persona);
				this.editarContrasena=true;
			}
			
		} catch (QueryException e) {
			
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_USUARIOS);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_CONSULTA);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (Exception e) {
			
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}
	private void consultarRolesUsuario(Usuario usuario) {
		IUsuarioFachada usuarioFachada=new UsuarioFachada();
		try {
			this.rolesUsuario=usuarioFachada.consultarRolesUsuario(usuario);
			this.idRolesUsuario=new Integer[this.rolesUsuario.size()];
			for (int i = 0; i<this.rolesUsuario.size();i++) {
				Rol rol = this.rolesUsuario.get(i);
				this.idRolesUsuario[i]=rol.getIdrol();
			}
		}catch (Exception e) {
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}

	public void guardarInformacionPersona(ActionEvent evento){
		try {
			if(validarDatosPersona(this.persona,true)){
				IUsuarioFachada usuarioFachada=new UsuarioFachada();
				usuarioFachada.guardarPersona(this.persona);
				this.persona=consultarPersona(persona);
				guardarInformacionUsuario(this.persona);
				consultarInformacionPersonas();
			}
		} catch (PersistException e) {
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_PERSONA);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_GUARDADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (Exception e) {
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}
	
	private boolean validarDatosPersona(Persona persona,boolean validarExistenciaPersona) throws QueryException{
		boolean cumple=true;
		String mensaje = Recursos.getInstance().getMensaje("campo.obligatorio");
		String nombreCampo="";
		
		mensaje = Recursos.getInstance().getMensaje("campo.obligatorio");
		
		if(persona.getNombres()==null||persona.getNombres().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("gestionUsuarios.nombres");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}else{
			persona.setNombres(persona.getNombres().trim());
		}
		if(persona.getPrimerApellido()==null||persona.getPrimerApellido().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("gestionUsuarios.primerApellido");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}else{
			persona.setPrimerApellido(persona.getPrimerApellido().trim());
		}
		if(persona.getNumeroIdentificacion()==null||persona.getNumeroIdentificacion().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("gestionUsuarios.numeroId");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}else{
			persona.setNumeroIdentificacion(persona.getNumeroIdentificacion().trim());
		}
		if(persona.getTipoIdentificacion()==null||persona.getTipoIdentificacion().getIdtipoIdentificacion()<=0){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("gestionUsuarios.tipoId");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(persona.getGenero().getIdgenero()<=0){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("gestionUsuarios.genero");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(persona.getCorreoElectronico()!=null && !persona.getCorreoElectronico().trim().isEmpty()){
			String PATTERN_EMAIL = 
					"^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
							+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
			Pattern pattern=Pattern.compile(PATTERN_EMAIL);
			Matcher matcher = pattern.matcher(persona.getCorreoElectronico().trim());
	        
			if(matcher.matches()){
				persona.setCorreoElectronico(persona.getCorreoElectronico().trim());
			}else{
				cumple=false;
				mensaje=Recursos.getInstance().getMensaje("error.cliente.correoElectronicoInvalido");
				Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje);
			}
		}
		
		if(validarExistenciaPersona){
			Persona personaVerificar=consultarPersonaPorIdentificacion(persona);
			if(personaVerificar!=null){
				cumple=false;
				mensaje = Recursos.getInstance().getMensaje("error.gestionUsuarios.existe");
				Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje);
			}
		}
		return cumple;
	}
	
	private Persona consultarPersona(Persona persona) throws QueryException{
		Persona personaVerificar=new Persona();
		personaVerificar.setNumeroIdentificacion(persona.getNumeroIdentificacion());
		personaVerificar.setTipoIdentificacion(persona.getTipoIdentificacion());
		
		IUsuarioFachada usuarioFachada=new UsuarioFachada();
		personaVerificar=usuarioFachada.consultarPersona(persona);
		return personaVerificar;
	}
	
	private Persona consultarPersonaPorIdentificacion(Persona persona) throws QueryException{
		Persona personaVerificar=new Persona();
		persona.setIdpersona(persona.getIdpersona());
		personaVerificar.setNumeroIdentificacion(persona.getNumeroIdentificacion());
		personaVerificar.setTipoIdentificacion(persona.getTipoIdentificacion());
		
		IUsuarioFachada usuarioFachada=new UsuarioFachada();
		personaVerificar=usuarioFachada.consultarPersonaPorIdentificacion(persona);
		return personaVerificar;
	}
	
	public void editarInformacionPersona(ActionEvent event){
		try {
			if(validarDatosPersona(this.persona,true)){
				IUsuarioFachada usuarioFachada=new UsuarioFachada();
				usuarioFachada.editarPersona(this.persona);
				
				editarInformacionUsuario();
				consultarInformacionPersonas();
			}
		} catch (PersistException e) {
			// TODO Auto-generated catch block
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_PERSONA);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_EDICION);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (Exception e) {
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}
	
	public void guardarInformacionUsuario(Persona persona){
		try {
			if(validarDatosUsuario(this.usuario)){
				IUsuarioFachada usuarioFachada=new UsuarioFachada();
				this.usuario.setPersona(persona);
				this.usuario.setActivo(persona.isActivo());
				if(this.editarContrasena){
					this.usuario.setPassword(this.contrasena.trim());
				}
				
				asignarRolesUsuario(usuario);
				
				usuarioFachada.guardarUsuario(this.usuario);
			}
		} catch (PersistException e) {
			// TODO Auto-generated catch block
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_PERSONA);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_GUARDADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (Exception e) {
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}
	
	private void asignarRolesUsuario(Usuario usuario) throws QueryException {
		IUsuarioFachada usuarioFachada=new UsuarioFachada();
		Set<Rol>roles=new HashSet<Rol>(0);
		for (int i = 0; i < idRolesUsuario.length; i++) {
			Rol rol=new Rol();
			rol.setIdrol(idRolesUsuario[i]);
			rol=usuarioFachada.consultarRol(rol);
			roles.add(rol);
		}
		usuario.setRoles(roles);
		
	}

	private boolean validarDatosUsuario(Usuario usuario) {
		boolean cumple=true;
		String mensaje="";
		IUsuarioFachada usuarioFachada=new UsuarioFachada();
		boolean existeUsuario = false;
		if(!editandoPersona){
			try {
				existeUsuario = usuarioFachada.existeUsuario(usuario.getLogin());
			} catch (QueryException e) {
				// TODO Auto-generated catch block
				String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_USUARIO);
				mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_CONSULTA);
				Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
			} catch (Exception e) {
				mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
				Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
			}
		}else{
			try {
				Usuario usuarioVerificacion = usuarioFachada.consultarUsuario(usuario.getLogin(), null);
				if(usuarioVerificacion!=null
						&&usuarioVerificacion.getPersona().getIdpersona()!=this.persona.getIdpersona()){
					existeUsuario=true;
				}
			} catch (QueryException e) {
				// TODO Auto-generated catch block
				String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_USUARIO);
				mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_CONSULTA);
				Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
			} catch (Exception e) {
				mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
				Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
			}
		}
		if(existeUsuario){
			mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_USUARIO_EXISTE);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
			cumple=false;
		}
		
		mensaje = Recursos.getInstance().getMensaje("campo.obligatorio");
		String nombreCampo="";
		if(usuario.getLogin()==null||usuario.getLogin().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("gestionUsuarios.usuario.nombreUsuario");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}else{
			usuario.setLogin(usuario.getLogin().trim());
		}
		if(this.editarContrasena){
			if(this.contrasena==null||this.contrasena.trim().isEmpty()){
				cumple=false;
				nombreCampo=Recursos.getInstance().getEtiqueta("gestionUsuarios.usuario.contrasena");
				Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
			}else{
				if(!this.contrasena.equals(this.confirmacionContrasena)){
					cumple=false;
					mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_GESTION_USUARIOS_PASSWORD_NO_IGUALES);
					Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
				}
			}
			
		}
		return cumple;
	}

	public void editarInformacionUsuario(){
		try {
			if(validarDatosUsuario(this.usuario)){
				IUsuarioFachada usuarioFachada=new UsuarioFachada();
				this.usuario.setActivo(this.persona.isActivo());
				if(this.editarContrasena){
					this.usuario.setPassword(this.contrasena.trim());
				}
				
				asignarRolesUsuario(usuario);
				
				usuarioFachada.editarUsuario(this.usuario);
			}
		} catch (PersistException e) {
			// TODO Auto-generated catch block
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_PERSONA);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_EDICION);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (Exception e) {
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}
	
	public void cambiarContrasena(ValueChangeEvent evento){
		this.editarContrasena=(Boolean) evento.getNewValue();
	}
	
	public void cancelarEdicionPersona(ActionEvent evento){
		this.usuario=new Usuario();
		this.rolesUsuario=new ArrayList<Rol>(0);
		this.idRolesUsuario=new Integer[0];
		
		this.persona=new Persona();
		this.persona.setTipoIdentificacion(new TipoIdentificacion());
		this.persona.setGenero(new Genero());
		this.usuario.setPersona(this.persona);
		this.editandoPersona=false;
		this.editarContrasena=true;
		this.contrasena="";
		this.confirmacionContrasena="";
	}
	
	/**
	 * @return the usuario
	 *
	 * @author Jeison
	 * @date 20/02/2013
	 */
	public Usuario getUsuario() {
		return usuario;
	}

	/**
	 * @param usuario the usuario to set
	 * 
	 * @author Jeison
	 * @date 20/02/2013
	 */
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	/**
	 * @return the listaUsuarios
	 *
	 * @author Jeison
	 * @date 20/02/2013
	 */
	public List<Usuario> getListaUsuarios() {
		return listaUsuarios;
	}

	/**
	 * @param listaUsuarios the listaUsuarios to set
	 * 
	 * @author Jeison
	 * @date 20/02/2013
	 */
	public void setListaUsuarios(List<Usuario> listaUsuarios) {
		this.listaUsuarios = listaUsuarios;
	}

	/**
	 * @return the persona
	 *
	 * @author Jeison
	 * @date 20/02/2013
	 */
	public Persona getPersona() {
		return persona;
	}

	/**
	 * @param persona the persona to set
	 * 
	 * @author Jeison
	 * @date 20/02/2013
	 */
	public void setPersona(Persona persona) {
		this.persona = persona;
	}

	/**
	 * @return the listaPersonas
	 *
	 * @author Jeison
	 * @date 20/02/2013
	 */
	public List<Persona> getListaPersonas() {
		return listaPersonas;
	}

	/**
	 * @param listaPersonas the listaPersonas to set
	 * 
	 * @author Jeison
	 * @date 20/02/2013
	 */
	public void setListaPersonas(List<Persona> listaPersonas) {
		this.listaPersonas = listaPersonas;
	}

	/**
	 * @return the editando
	 *
	 * @author Jeison
	 * @date 21/02/2013
	 */
	public boolean isEditandoPersona() {
		return editandoPersona;
	}

	/**
	 * @param editando the editando to set
	 * 
	 * @author Jeison
	 * @date 21/02/2013
	 */
	public void setEditandoPersona(boolean editando) {
		this.editandoPersona = editando;
	}

	/**
	 * @return the tiposIdentificacion
	 *
	 * @author Jeison
	 * @date 4/03/2013
	 */
	public List<SelectItem> getTiposIdentificacion() {
		return tiposIdentificacion;
	}

	/**
	 * @param tiposIdentificacion the tiposIdentificacion to set
	 * 
	 * @author Jeison
	 * @date 4/03/2013
	 */
	public void setTiposIdentificacion(List<SelectItem> tiposIdentificacion) {
		this.tiposIdentificacion = tiposIdentificacion;
	}

	/**
	 * @return the generos
	 *
	 * @author Jeison
	 * @date 5/03/2013
	 */
	public List<SelectItem> getGeneros() {
		return generos;
	}

	/**
	 * @param generos the generos to set
	 * 
	 * @author Jeison
	 * @date 5/03/2013
	 */
	public void setGeneros(List<SelectItem> generos) {
		this.generos = generos;
	}

	/**
	 * @return the cambiarPassword
	 *
	 * @author Jeison
	 * @date 11/03/2013
	 */
	public boolean isEditarContrasena() {
		return editarContrasena;
	}

	/**
	 * @param cambiarPassword the cambiarPassword to set
	 * 
	 * @author Jeison
	 * @date 11/03/2013
	 */
	public void setEditarContrasena(boolean editarContrasena) {
		this.editarContrasena = editarContrasena;
	}

	/**
	 * @return the password
	 *
	 * @author Jeison
	 * @date 11/03/2013
	 */
	public String getContrasena() {
		return contrasena;
	}

	/**
	 * @param password the password to set
	 * 
	 * @author Jeison
	 * @date 11/03/2013
	 */
	public void setContrasena(String password) {
		this.contrasena = password;
	}

	/**
	 * @return the confirmacionPassword
	 *
	 * @author Jeison
	 * @date 11/03/2013
	 */
	public String getConfirmacionContrasena() {
		return confirmacionContrasena;
	}

	/**
	 * @param confirmacionPassword the confirmacionPassword to set
	 * 
	 * @author Jeison
	 * @date 11/03/2013
	 */
	public void setConfirmacionContrasena(String confirmacionPassword) {
		this.confirmacionContrasena = confirmacionPassword;
	}

	public List<Rol> getRolesUsuario() {
		return rolesUsuario;
	}

	public void setRolesUsuario(List<Rol> rolesUsuario) {
		this.rolesUsuario = rolesUsuario;
	}

	public List<SelectItem> getItemsRoles() {
		return itemsRoles;
	}

	public void setItemsRoles(List<SelectItem> itemsRoles) {
		this.itemsRoles = itemsRoles;
	}

	public Integer[] getIdRolesUsuario() {
		return idRolesUsuario;
	}

	public void setIdRolesUsuario(Integer[] idRolesUsuario) {
		this.idRolesUsuario = idRolesUsuario;
	}

}
